﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QuanLyThietBi.BLL;
using QuanLyThietBi.DAL.Models;

namespace QuanLyThietBi
{
    public partial class QuanLyThietBi : Form
    {
        private ThietBiBO tbBO;
        private NhanVienBO nvBO;
        List<THIETBI> listThietBi = new List<THIETBI>();
        private const int pagesize = 20;
        private int currentPage = 1;
        private int totalPage = 1;

        public QuanLyThietBi()
        {
            InitializeComponent();
        }

        private void QuanLyThietBi_Load(object sender, EventArgs e)
        {
            BindDataToDataGridview();
            this.dtgDanhSachThietBi.Columns["Thiết Bị ID"].Visible = false;
            this.dtgDanhSachThietBi.Columns["Hãng Sản Xuất"].Visible = false;
            this.dtgDanhSachThietBi.Columns["Tình Trạng ID"].Visible = false;
        }

        private void BindDataToDataGridview()
        {
            tbBO = new ThietBiBO();
            listThietBi = tbBO.GetAllThietBi();

            BindDataWithPagging(listThietBi);
        }

        //private void BindDataToDataGridview(List<THIETBI> listThietBi)
        //{
        //    BindDataWithPagging(listThietBi);
        //}

        private void BindDataWithPagging(List<THIETBI> listThietBi)
        {
            int totalItems = listThietBi.Count();
            
            totalPage = (totalItems + pagesize - 1) / pagesize;

            lblTrangHienTai.Text = "Trang " + currentPage + "/" + totalPage;

            lblTongThietBi.Text = totalItems +"";

            if (listThietBi != null && listThietBi.Count > 0)
            {
                DataTable table = new DataTable();
                table.Columns.Add("Thiết Bị ID", typeof(int));
                table.Columns.Add("STT", typeof(int));
                table.Columns.Add("Tên Thiết Bị", typeof(string));
                table.Columns.Add("Mã Tài Sản", typeof(string));
                table.Columns.Add("Loại Thiết Bị", typeof(string));
                table.Columns.Add("Hãng Sản Xuất", typeof(string));
                table.Columns.Add("Tình Trạng", typeof(string));
                table.Columns.Add("Nhân Viên", typeof(string));
                table.Columns.Add("Phòng Ban Đội", typeof(string));
                table.Columns.Add("Tình Trạng ID", typeof(int));

                int startItem = currentPage * pagesize - pagesize;
                int endItem = currentPage != totalPage ? currentPage * pagesize - 1 : totalItems - 1;

                for (int i = startItem; i <= endItem; i++)
                {
                    table.Rows.Add(
                        listThietBi[i].id,
                        i+1,
                        listThietBi[i].ten_thiet_bi,
                        listThietBi[i].ma_thiet_bi,
                        GetLoaiThietBiByID(listThietBi[i].loai_thiet_bi),
                        listThietBi[i].hang_san_xuat,
                        GetTinhTrangById(listThietBi[i].tinh_trang),
                        GetNhanVien(listThietBi[i].tinh_trang, listThietBi[i].id),
                        GetPhongBan(listThietBi[i].tinh_trang, listThietBi[i].id),
                        listThietBi[i].tinh_trang);
                }

                this.dtgDanhSachThietBi.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                dtgDanhSachThietBi.DataSource = table;

                if (currentPage == 1)
                {
                    btnTrangDau.Enabled = false;
                    btnTrangTruoc.Enabled = false;
                }
                else
                {
                    btnTrangDau.Enabled = true;
                    btnTrangTruoc.Enabled = true;
                }

                if (currentPage == totalPage)
                {
                    btnTrangCuoi.Enabled = false;
                    btnTrangTiep.Enabled = false;
                }
                else
                {
                    btnTrangCuoi.Enabled = true;
                    btnTrangTiep.Enabled = true;
                }
            }
        }

        private string GetLoaiThietBiByID(int id)
        {
            LoaiThietBiBO ltbBO = new LoaiThietBiBO();
            return ltbBO.GetLoaiThietBiById(id);
        }

        private string GetTinhTrangById(int id)
        {
            TinhTrangBO ttBO = new TinhTrangBO();
            return ttBO.GetTinhTrangById(id);
        }

        private void btnThemThietBi_Click(object sender, EventArgs e)
        {
            ThemMoiChinhSuaThietBi addNew = new ThemMoiChinhSuaThietBi();
            addNew.Show();
            this.Hide();
        }

        private void btn_TroLai_Click(object sender, EventArgs e)
        {
            Main main = new Main();
            main.Show();
            this.Hide();
        }

        private void btnCapThietBi_Click(object sender, EventArgs e)
        {
            int id = -1;
            int tinhtrangID = -1;
            try
            {
                foreach (DataGridViewRow row in this.dtgDanhSachThietBi.SelectedRows)
                {
                    DataRow tb = (row.DataBoundItem as DataRowView).Row;
                    if (tb != null)
                    {
                        id = Convert.ToInt32(tb.ItemArray[0].ToString());
                        tinhtrangID = Convert.ToInt32(tb.ItemArray[9].ToString());
                    }
                }
                if (tinhtrangID != 1)
                {
                    MessageBox.Show("Thiết bị đang được sử dụng hay bị hư hỏng - bảo trì sữa chữa, hãy đưa về tình trạng chưa sử dụng trước khi cấp phát !!!", "Thông báo !!!");
                }
                else
                {
                    if (id != -1)
                    {
                        CapPhatThietBi cptb = new CapPhatThietBi(id);
                        cptb.Show();
                        this.Hide();
                    }
                }
            }
            catch
            {
                //CapPhatThietBi cptb = new CapPhatThietBi();
                //cptb.Show();
                //this.Hide();
            }

        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            int id = -1;
            foreach (DataGridViewRow row in this.dtgDanhSachThietBi.SelectedRows)
            {
                DataRow tb = (row.DataBoundItem as DataRowView).Row;
                if (tb != null)
                {
                    id = Convert.ToInt32(tb.ItemArray[0].ToString());
                }
            }
            if (id != -1)
            {
                ThietBiBO tbBo = new ThietBiBO();
                var thietbi = tbBo.GetThietBiById(id);
                if (thietbi != null)
                {
                    if (thietbi.tinh_trang != 2)
                    {
                        ThemMoiChinhSuaThietBi suaForm = new ThemMoiChinhSuaThietBi(id);
                        suaForm.Show();
                        this.Hide();
                    }
                    else
                    {
                        MessageBox.Show("Thiết bị đang cấp cho người dùng, không sửa được. Vui lòng thu hồi thiết bị trước khi sửa!!!", "Thông Báo !!!");
                    }
                }
            }
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("Bạn có muốn xóa thiết bị này ?", "Thông Báo !!!", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
            if (result == DialogResult.OK)
            {
                int id = -1;
                foreach (DataGridViewRow row in this.dtgDanhSachThietBi.SelectedRows)
                {
                    DataRow tb = (row.DataBoundItem as DataRowView).Row;
                    if (tb != null)
                    {
                        id = Convert.ToInt32(tb.ItemArray[0].ToString());
                    }
                }
                if (id != -1)
                {
                    ThietBiBO tbBo = new ThietBiBO();
                    var thietbi = tbBo.GetThietBiById(id);
                    if (thietbi != null)
                    {
                        if (thietbi.tinh_trang == 5)
                        {
                            //Set la da xoa
                            thietbi.da_xoa = 1;
                            int daxoa = tbBO.XoaThietBi(thietbi);
                            if (daxoa == 1)
                            {
                                MessageBox.Show("Xóa thành công", "Thông Báo !!!");
                                BindDataToDataGridview();
                            }
                        }
                        else
                        {
                            MessageBox.Show("Thiết bị chưa được phép thanh lý. Vui lòng chọn nút Sửa chuyển thiết bị sang tình trạng Chờ thanh lý.", "Thông Báo !!!");
                        }
                    }
                }
            }
        }

        private void btnThuHoiThietBi_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("Bạn có muốn thu hồi thiết bị này ?", "Thông Báo !!!", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
            if (result == DialogResult.OK)
            {
                int id = -1;
                foreach (DataGridViewRow row in this.dtgDanhSachThietBi.SelectedRows)
                {
                    DataRow tb = (row.DataBoundItem as DataRowView).Row;
                    if (tb != null)
                    {
                        id = Convert.ToInt32(tb.ItemArray[0].ToString());
                    }
                }
                if (id != -1)
                {
                    ThietBiBO tbBo = new ThietBiBO();
                    var thietbi = tbBo.GetThietBiById(id);
                    if (thietbi != null)
                    {
                        thietbi.tinh_trang = 1;
                        tbBo.UpdateThietBi(thietbi);
                    }

                    NhanVienThietBiBO nvtbBo = new NhanVienThietBiBO();
                    var nvtb = nvtbBo.GetNhanVienThietBiByThietBi(id);
                    LichSuThietBiBO lstbBO = new LichSuThietBiBO();
                    NhanVienBO nvBO = new NhanVienBO();
                    LICHSUTHIETBI lstb = new LICHSUTHIETBI()
                    {
                        id_thiet_bi = id,
                        ngay = DateTime.Now,
                        noi_dung = "Thu Hồi Từ Nhân Viên : " + nvBO.GetTenNhanVien(id)

                    };

                    lstbBO.SaveLichSuThietBi(lstb);
                    nvtbBo.DeleteNhanVienThietBi(nvtb);

                    MessageBox.Show("Thu hồi thành công !!!", "Thông Báo !!!");
                    BindDataToDataGridview();
                }
            }
        }

        private void btnTimKiem_Click(object sender, EventArgs e)
        {
            currentPage = 1;
            if (string.IsNullOrEmpty(tbxTenThietBi.Text.Trim()) && string.IsNullOrEmpty(tbxMaThietBi.Text.Trim()))
            {
                tbBO = new ThietBiBO();
                listThietBi = tbBO.SearchThietBi(string.Empty, string.Empty);
            }
            else
            {
                tbBO = new ThietBiBO();
                listThietBi = tbBO.SearchThietBi(tbxTenThietBi.Text.Trim(), tbxMaThietBi.Text.Trim());
            }
            BindDataWithPagging(listThietBi);
        }

        private string GetNhanVien(int idtinhtrang, int idthietbi)
        {
            string tennhanvien = string.Empty;
            if (idtinhtrang == 2)
            {
                nvBO = new NhanVienBO();
                tennhanvien = nvBO.GetTenNhanVien(idthietbi);
            }
            return tennhanvien;
        }

        private string GetPhongBan(int idtinhtrang, int idthietbi)
        {
            string tenphongban = string.Empty;
            PhongBanBO pbBO = new PhongBanBO();
            if (idtinhtrang == 2)
            {
                nvBO = new NhanVienBO();
                NHANVIEN nv = nvBO.GetNhanVien(idthietbi);
                if (nv != null)
                {
                    tenphongban = pbBO.GetTenPhongBan(nv.id);
                }
            }
            return tenphongban;
        }

        private void btnTrangTiep_Click(object sender, EventArgs e)
        {
            currentPage++;
            BindDataWithPagging(listThietBi);
        }

        private void btnTrangTruoc_Click(object sender, EventArgs e)
        {
            currentPage--;
            BindDataWithPagging(listThietBi);
        }

        private void btnTrangCuoi_Click(object sender, EventArgs e)
        {
            currentPage = totalPage;
            BindDataWithPagging(listThietBi);
        }

        private void btnTrangDau_Click(object sender, EventArgs e)
        {
            currentPage = 1;
            BindDataWithPagging(listThietBi);
        }
    }
}
